1. Field of the Invention
The present invention is directed generally to methods of virtualizing an application so that when the application is executed on a computing device having an operating system, the application is at least partially isolated from the operating system and executes on the computing device without having been installed or having administrator privileges.
2. Description of the Related Art
Installation of a typical application on a computing device usually requires a long setup and configuration process, which includes copying files, registering software components, installing runtimes, installing third-party components upon which the application is dependent, configuring setup files, and so forth. Additionally, user configuration including setting up user preferences, and other customization is also typically required.
Further, more than one application is typically installed on the computing device. Interactions between shared components and different versions of the same application frequently introduce errors when applications are installed, uninstalled, or upgraded.
Within an organization, applications are typically installed by Information Technology (“IT”) personnel and systems administrators. To protect information stored on networked computing devices, it may be desirable to configure the organization's computing devices with security measures. Unfortunately, many applications do not function properly on secured, locked-down desktops. Thus, IT personnel and systems administrators may be forced by the needs of the organization to compromise network security for application compatibility.
One method of deploying (installing and executing) an application that avoids these above problems includes preparing and executing a virtualized copy of the application (a “virtual application”). A virtual application is a virtual machine image pre-configured with all of the files, registry data, settings, components, runtimes, and other dependencies required for a specific application to execute immediately and without installation on the host computing device. Virtual applications allow application publishers and IT administrators to reduce the costs and complexity associated with development, setup, configuration, deployment, and maintenance of software applications.
For example, a publisher of an application based on the Microsoft .NET Framework or Java runtime engine might create a virtual application that combines the application with the required runtime engine. Using this virtual application, an end-user can run the application immediately, even if the user has not installed the required runtime engine, or has an incompatible runtime engine installed. This improves both the user experience and reduces both test and support complexity associated with deployment of the application.
Furthermore, because each virtual application is an isolated execution environment, virtual applications may be concurrently executed that would otherwise interfere with one another. For example, applications that overwrite system DLLs or require different runtime engine versions can be executed simultaneously on a single host computing device. As an additional advantage, virtual applications can provide access to internal virtualized copies of privileged system resources, allowing unprivileged users to execute applications without encountering security exceptions or irritating Vista User Account Control (“UAC”) prompts.
Therefore, a need exists for methods and systems for preparing virtualized applications. A further need exists for a method of allowing an end user to build and configure the virtualized application. A virtual application configured to effectively share memory between processes is also desirable. The present application provides these and other advantages as will be apparent from the following detailed description and accompanying figures.